using System;
using Gtk;
using MySql.Data.MySqlClient;
//**	Hemos de definir la carpeta donde se encuentran las classes definidas por nosostros
using PSingleton;

public partial class MainWindow : Gtk.Window
{
	//**
	private MySqlConnection connection;
	private MySqlCommand mySqlCommand;
	private MySqlDataReader mySqlDataReader;
	
	public MainWindow () : base(Gtk.WindowType.Toplevel)
	{
		Build ();
		//**	Creamos la conexión abierta y le lanzamos la consulta
		connection = AppConnection.Instance.Connection;
		mySqlCommand = connection.CreateCommand();
		mySqlCommand.CommandText = "SELECT * FROM articulo;";
		mySqlDataReader = mySqlCommand.ExecuteReader();
		//**	Creamos tantas columnas como nos haya generado la consulta.
		for(int i=0; i<mySqlDataReader.FieldCount; i++)
		{
			treeview.AppendColumn(mySqlDataReader.GetName(i), new CellRendererText(), "text", i);
		}
		
		//** Creamos un array de tipos "string" de la longitud del numero de columnas del mySqlReader
		Type[] types = new Type[mySqlDataReader.FieldCount];
		for(int i=0; i<types.Length; i++)
		{
			types[i]=typeof(string);
		}
			
		//** Creamos un objeto ListStore pasandole como parametro el array de tipos
		ListStore listStore = new ListStore(types);
		
		//** Modelamos el treeView con el ListStore de que disponemos
		treeview.Model = listStore;
		
		//	Creamos un array de objetos donde guardaremos los valores de cada registro
		object[] values = new object[mySqlDataReader.FieldCount];
		//	Creamos un array de cadenas donde guardaremos los valores de cada columna
		string[] strings = new string[values.Length];
			
		//** Mientras vayamos leyendo y hayan registros(tuplas) en la consulta...
		while(mySqlDataReader.Read())
		{
			//**	Obtenemos los valores del dataReader
			mySqlDataReader.GetValues(values);
			/*
			for(int i=0;i<values.Length; i++)
			{
				strings[i] = values[i].ToString();
			}
			*/
			//** Una alternativa para guardar datos null
			for(int i=0;i<values.Length; i++)
			{
				if(mySqlDataReader.IsDBNull(i))
				{
					strings[i] = "null";
				}
				else
				{
					strings[i] = values[i].ToString();
				}
			}
			//** Añadimos los valores del registro al listStore
			listStore.AppendValues(strings);
		}
		//** Cerramos DataReader y Conexión
		mySqlDataReader.Close();
		connection.Close();	
	}

	protected void OnDeleteEvent (object sender, DeleteEventArgs a)
	{
		Application.Quit ();
		a.RetVal = true;
	}
}

